package com.itheima.case2.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

/*
    使用工厂创建对象（SpringIOC）
 */
public class BeansFactory {
    //1.创建集合保存对象
    private static Map<String,Object> map = new HashMap<>();
    //2.定义静态方法生产对象（使用单例模式的懒汉单例模式）
    //多线程不安全，需要加锁（参数是beans.properties配置文件中的key）
    public static synchronized  <T> T getInstance(String classNameKey) throws Exception{
        //3.根据传递的key获取map集合的值
        Object objValue = map.get(classNameKey);
        //4.判断
        if(objValue == null){
            //5.说明之前map集合中没有该对象，使用反射创建对象
            //6.读取配置文件
            ResourceBundle bundle = ResourceBundle.getBundle("beans");//只需要书写配置文件名即可
            String keyStr = bundle.getString(classNameKey);//根据配置文件中键获取值
            //7.获取类的Class对象
            Class<?> clazz = Class.forName(keyStr);
            //8.创建对象
            objValue = clazz.newInstance();
            //9.放到map中
            map.put(classNameKey,objValue);//t1 0x001  t2  0x002
        }

        //10.将创建的对象返回给调用者
        return (T)objValue;

    }
}
